iT邦幫忙

0

JS 語法(靜態)作用域(Lexical scope)

//語法作用域
function callName(){
    var chicken = '小雞'
    console.log(chicken);
}
callName();
//讀不到
console.log(chicken);

https://ithelp.ithome.com.tw/upload/images/20201013/20123039drv8jItynC.jpg
會發現外層讀不到內層所宣告的 chicken
是因為 JS 的作用域在函式(function)內
所以在內層宣告變數
外層當然是讀不到啦~~


作用域又分成兩種
https://ithelp.ithome.com.tw/upload/images/20201013/20123039ilEIdQAIrI.jpg

靜態(語法)作用域
Def:
變數的作用域在語法解析時,就已經確定作用域,且不會再改變
也就是在撰寫函式時 作用域就已經確定
JS屬於 靜態作用域

動態作用域
Def:
變數的作用域在函式調用時才決定

除此之外 JS的作用域是一層一層向內
若 作用域內有用到變數
但作用域卻沒有此變數
則會向外查找
若向外查找也沒有(以下圖 會去全域找)
則會出現 ReferenceError : 變數 is not defined

//全域

// fn1作用域 獨立
function fn1(){
}
// fn2作用域 獨立
function fn2(){
}

這裡舉一個例子

var num = 1;
function fn1(){
    //靜態作用域: 1
    //動態作用域: 10
    console.log(num);
}
function fn2(){
    var num = 10;
    fn1();
}
fn2();

那今天的介紹就到這裡
若有任何問題 或 內容有誤
都可以跟我說唷/images/emoticon/emoticon07.gif


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言